Virtual Private GatewayとのVPN接続をTransit Gatewayに移行できるようになりました
はじめに
中山(順)です
仮想プライベートゲートウェイとのVPN接続をTransit Gatewayに移行できるようになりました。
やってみた
VGWとVPN接続している状態を作成しておきます。 今回は、以下の記事で構築した環境を移行してみます。 というか、以下の記事はこの記事のために書きました。
移行前の構成は以下の通りです。
これを以下のようにします。
以下の手順で移行をすすめます。
- Transit Gatewayを作成およびVPCにアタッチ
- VPN Connectionを変更
- ルートテーブルを修正
Modifying a Site-to-Site VPN Connection's Target Gateway
今回はAWS CLIでやっていきます。
Transit Gatewayを作成およびVPCにアタッチ
Transit Gatewayを作成します。
aws ec2 create-transit-gateway
{ "TransitGateway": { "TransitGatewayArn": "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:transit-gateway/tgw-05b0a9c4c2fec5f4b", "CreationTime": "2019-05-01T16:25:32.000Z", "State": "pending", "TransitGatewayId": "tgw-05b0a9c4c2fec5f4b", "OwnerId": "521539043457", "Options": { "DefaultRouteTableAssociation": "enable", "DnsSupport": "enable", "AutoAcceptSharedAttachments": "disable", "AssociationDefaultRouteTableId": "tgw-rtb-00df1442d804fb846", "PropagationDefaultRouteTableId": "tgw-rtb-00df1442d804fb846", "AmazonSideAsn": 64512, "DefaultRouteTablePropagation": "enable", "VpnEcmpSupport": "enable" } } }
このTransit GatewayをVPCにアタッチします。
aws ec2 create-transit-gateway-vpc-attachment \ --transit-gateway-id tgw-05b0a9c4c2fec5f4b \ --vpc-id vpc-0540e877c50287092 \ --subnet-ids subnet-0b38aff0967a8bd79 subnet-0bd6948809a875968 subnet-06b10a86356d582b8
{ "TransitGatewayVpcAttachment": { "VpcId": "vpc-0540e877c50287092", "VpcOwnerId": "521539043457", "SubnetIds": [ "subnet-0bd6948809a875968", "subnet-0b38aff0967a8bd79", "subnet-06b10a86356d582b8" ], "TransitGatewayAttachmentId": "tgw-attach-08bc765835a81efc5", "CreationTime": "2019-05-01T16:28:31.000Z", "State": "pending", "TransitGatewayId": "tgw-05b0a9c4c2fec5f4b", "Options": { "DnsSupport": "enable", "Ipv6Support": "disable" } } }
現時点でのTransit Gatewayのルートテーブルの状態を確認しておきます。
aws ec2 describe-transit-gateway-route-tables
{ "TransitGatewayRouteTables": [ { "DefaultPropagationRouteTable": true, "Tags": [], "CreationTime": "2019-05-01T16:26:02.000Z", "TransitGatewayRouteTableId": "tgw-rtb-00df1442d804fb846", "State": "available", "TransitGatewayId": "tgw-05b0a9c4c2fec5f4b", "DefaultAssociationRouteTable": true } ] }
aws ec2 search-transit-gateway-routes \ --transit-gateway-route-table-id tgw-rtb-00df1442d804fb846 \ --filters Name=attachment.resource-id,Values=vpc-0540e877c50287092
{ "Routes": [ { "TransitGatewayAttachments": [ { "ResourceType": "vpc", "ResourceId": "vpc-0540e877c50287092", "TransitGatewayAttachmentId": "tgw-attach-08bc765835a81efc5" } ], "DestinationCidrBlock": "10.0.0.0/16", "State": "active", "Type": "propagated" } ], "AdditionalRoutesAvailable": false }
以上のように、VPCのCIDRがTransit Gatewayに広告されていることが分かります。
VPN Connectionを変更
ここもAWS CLIで設定しようと思いましたが、どうやらブログの執筆時点でAWS CLIにコマンドが提供されていないようでした。 しょうがないので、マネージメントコンソールで設定します。
変更先であるTransit Gatewayを指定します。
変更処理が開始されてしばらくすると、通信ができなくなります。
しばらくすると、VPNトンネルのステータスが復活します。 この際、VPNルーターの設定は変更しておりません。
以下はルーターのsyslogです。
2019/05/02 02:11:02: same message repeated 3 times 2019/05/02 02:11:02: [IKE] SA[1] DPD: detected dead peer 2019/05/02 02:11:03: [IKE] initiate ISAKMP phase to xxx.xxx.xxx.xxx (local address zzz.zzz.zzz.zzz) 2019/05/02 02:11:03: [IKE] initiate informational exchange (delete) 2019/05/02 02:11:03: same message repeated 1 times 2019/05/02 02:11:03: IP Tunnel[1] Down 2019/05/02 02:11:07: [IKE] initiate informational exchange (delete) 2019/05/02 02:11:08: [IKE] initiate ISAKMP phase to xxx.xxx.xxx.xxx (local address zzz.zzz.zzz.zzz) 2019/05/02 02:11:10: [IKE] SA[2] DPD: detected dead peer 2019/05/02 02:11:11: [IKE] initiate ISAKMP phase to yyy.yyy.yyy.yyy (local address zzz.zzz.zzz.zzz) 2019/05/02 02:11:11: [IKE] initiate informational exchange (delete) 2019/05/02 02:11:11: same message repeated 1 times 2019/05/02 02:11:11: IP Tunnel[2] Down 2019/05/02 02:11:15: [IKE] initiate informational exchange (delete) 2019/05/02 02:11:16: [IKE] initiate ISAKMP phase to yyy.yyy.yyy.yyy (local address zzz.zzz.zzz.zzz) 2019/05/02 02:13:25: [IKE] initiate IPsec phase to xxx.xxx.xxx.xxx 2019/05/02 02:13:26: IP Tunnel[1] Up 2019/05/02 02:13:33: [IKE] initiate IPsec phase to yyy.yyy.yyy.yyy 2019/05/02 02:13:34: IP Tunnel[2] Up
ルートテーブルを修正
ここまでで、VPN接続自体の移行は完了しますが、エンドツーエンドの通信は復活していません。 なぜなら、これまではVGWに広告されていた経路を自動でルートテーブルに広告していたのですが、Transit GatewayをVPCにアタッチしただけでは経路を広告してくれないためです。
そのため、手動でルートを追加します。
ここまでの作業でエンドツーエンドの通信が復活しました。
ルートの確認
以上のように、VPCから広告された経路だけでなく、VPNから広告された経路も確認できます。
aws ec2 search-transit-gateway-routes \ --transit-gateway-route-table-id tgw-rtb-00df1442d804fb846 \ --filters Name=attachment.resource-type,Values=vpn
{ "Routes": [ { "TransitGatewayAttachments": [ { "ResourceType": "vpn", "ResourceId": "vpn-0b491a1a6c8c6ba29(xxx.xxx.xxx.xxx)", "TransitGatewayAttachmentId": "tgw-attach-0f39950ff4639057c" }, { "ResourceType": "vpn", "ResourceId": "vpn-0b491a1a6c8c6ba29(yyy.yyy.yyy.yyy)", "TransitGatewayAttachmentId": "tgw-attach-0f39950ff4639057c" } ], "DestinationCidrBlock": "0.0.0.0/0", "State": "active", "Type": "propagated" } ], "AdditionalRoutesAvailable": false }
aws ec2 search-transit-gateway-routes \ --transit-gateway-route-table-id tgw-rtb-00df1442d804fb846 \ --filters Name=attachment.resource-type,Values=vpc
{ "Routes": [ { "TransitGatewayAttachments": [ { "ResourceType": "vpc", "ResourceId": "vpc-0540e877c50287092", "TransitGatewayAttachmentId": "tgw-attach-08bc765835a81efc5" } ], "DestinationCidrBlock": "10.0.0.0/16", "State": "active", "Type": "propagated" } ], "AdditionalRoutesAvailable": false }
まとめ
この通り、Transit Gatewayへの移行にはダウンタイムを伴います。
とはいっても、Transit Gatewayに移行することでトポロジーが圧倒的にシンプルになりますので、ネットワークが複雑で管理に難儀している方にはおすすめです。
現場からは以上です。